#include "command_proc.h"


u32 _BusCMDData_proc(B1553_BusService *pBusServ)
{
    u32 ret = 0;
    struct B1553_TmPacket *pTmData = &(pBusServ->Telemeter_TX_Data);
    struct BusCmdData *pbusCmd = &(pBusServ->TC_CmdData);

    pTmData->Comm_Control_Flag = pbusCmd->paraID1; // 记录遥控标识

    // 不是待机模式 不能修改为其他模式
    if ((pTmData->Work_Mode_Flag != SYS_MODE_IDLE) && (pbusCmd->paraID1 != SYS_MODE_IDLE))
    {
        pTmData->Comm_Error_Flag = TELEMETRY_BUSCMD_TIMING_ERR;
        return CMDHANDLE_DONE; // 表示指令异常且已处理
    }

    // 判断数据正确性 并设置模式
    switch (pbusCmd->paraID1)
    {
    case SYS_MODE_IDLE:
    case SYS_MODE_TEST:
    case SYS_MODE_UPDATE:
    case SYS_MODE_WORK:
        pTmData->Work_Mode_Flag = pbusCmd->paraID1; // 修改遥测的工作模式
        pTmData->Comm_Error_Flag = 0;
        ret = CMDHANDLE_BUSCMD; // 返回总线指令
        break;

    default: // 未定义总线命令
        pTmData->Comm_Error_Flag = TELEMETRY_BUSCMD_UNDEFINE_ERR;
        ret = CMDHANDLE_DONE; // 表示指令异常且已处理
        break;
    }

    return ret;
}


u32 _BusInjectData_proc(B1553_BusService *pBusServ)
{
    int ret = 0;
    struct B1553_TmPacket *pTmData = &(pBusServ->Telemeter_TX_Data);
    struct BusCmdData *pbusCmd = &(pBusServ->TC_CmdData);

    pTmData->Comm_Control_Flag = pbusCmd->funcID; // 记录遥控标识

    // 收到擦除闪存的命令
    if (pbusCmd->funcID == DATAINJ_FLASH_ERASE)
    {
        if (pTmData->Work_Mode_Flag == SYS_MODE_UPDATE) // 处于更新模式时执行
        {
            pTmData->Comm_Error_Flag = 0;
            ret = CMDHANDLE_DATAINJ;
        }
        else // 其他模式时报错
        {
            pTmData->Comm_Error_Flag = TELEMETRY_BUSCMD_TIMING_ERR;
            ret = CMDHANDLE_DONE;
        }
        return ret;
    }

    // 非待机模式不只执行指令 报时机错
    if (pTmData->Work_Mode_Flag != SYS_MODE_IDLE)
    {
        pTmData->Comm_Error_Flag = TELEMETRY_BUSCMD_TIMING_ERR;
        return CMDHANDLE_DONE;
    }

    // 待机模式下执行指令
    switch (pbusCmd->funcID)
    {
    case DATAINJ_SAMPLE_PERIOD:
    case DATAINJ_CLOUD_THREHOLD:
    case DATAINJ_IP_CFG:
    case DATAINJ_CALIBRATION_PARA:
        pTmData->Comm_Error_Flag = 0;
        ret = CMDHANDLE_DATAINJ;
        break;

    default:
        pTmData->Comm_Error_Flag = TELEMETRY_BUSCMD_UNDEFINE_ERR;
        ret = CMDHANDLE_DONE;
        break;
    }

    return ret;
}